热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解封|保密性_https网络编程——HTTPS简介以及SSL协议详解

篇首语:本文由编程笔记#小编为大家整理,主要介绍了https网络编程——HTTPS简介以及SSL协议详解相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了https网络编程——HTTPS简介以及SSL协议详解相关的知识,希望对你有一定的参考价值。




参考;HTTPS简介以及SSL协议详解
地址:https://qingmu.blog.csdn.net/article/details/108209248?spm=1001.2014.3001.5502



目录


  • 1.HTTPS简介
  • 2.SSL协议介绍
    • 2.1、SSL协议的功能
    • 2.2、SSL协议在协议栈的位置
    • 2.3、SSL协议组成
      • 2.3.1、纪录协议的功能
      • 2.3.2、SSL记录协议的示意图
      • 2.3.3、SSL协议封装过程
      • 2.3.4、SSL协议解封装过程
      • 2.3.5、SSL握手协议

    • 全流程握手详解
      • Client hello
      • Server hello
      • Server Certificate
      • Client Certificate Requst
      • Server Hello done
      • Client Certificate
      • Client Key EXchange
      • Certificate verify
      • Change Cipher Spec
      • Client finished Message
      • 加密套件列表




1.HTTPS简介

HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer)是HTTP的安全版

HTTPS默认使用TCP端口443,也可以指定其他的TCP端口。


2.SSL协议介绍

HTTPS中s,实际上是SSL(Secure Sockets Layer)协议。

SSL是Netscape公司发明的一种用于WEB的安全传输协议。随着时间的推移由于Netscape失去了市场份额,它将SSL的维护工作移交给因特网工程任务(IETF)。第一个后Netscape版本被重新命名为安全传输层协议(TLS),TLS(Transport Layer Security :RFC 2246)是基于SSL上研发的,但是与SSLv3.0有细微的差别。

因此,SSL协议有时也称为TLS协议。目前常用的是TLSv1.0的协议


2.1、SSL协议的功能

1、保证传输数据的保密性
2、保证传输数据的完整性 rc4
3、实现通信双方的互相身份认证—非对称加密


2.2、SSL协议在协议栈的位置


2.3、SSL协议组成

SSL协议是一个分层的协议,共有两层组成。

高层协议包括:
SSL握手协议(SSL HandshakeProtocol)、
改变加密约定协议(Change Cipher Spec Protocol)、
报警协议(AlertProtocol)
ChangeCipherSpce:改变加密约定协议

·处于SSL协议的底层的是:
.SSL记录层协议(SSL Record Protocol)
记录层协议实际上是一个简单的封装或者说是“打包”协议。记录可能是明文传送的,也可能是被加密传送的,


2.3.1、纪录协议的功能

1、保证消息的完整性
2、机密性


2.3.2、SSL记录协议的示意图


数据可能是加密的也可能是明文。在握手过程中除了最后一条finished的报文外,其他报文都是明文传输的。

填充:只有在使用分组加密才会有填充和填充长度两个字段。

MAC(Message Authentication Code)消息验证码
主要目的是认证消息、检验数据是否被篡改。
目前常用的消息摘要算法有MD5(Message-Digest Algorithm 5)和SHA(Secure Hash Algorithm )。
SSL中的摘要算法是:HMAC即Keyed-Hash Message Authentication Code。
HMAC是在使用消息摘要函数(例如MD5等)的同时,增加了一个“密钥”作为输入。
消息验证码也称为消息摘要,是实现数据完整性的主要手段


2.3.3、SSL协议封装过程


2.3.4、SSL协议解封装过程


2.3.5、SSL握手协议

SSL握手协议是ssL协议中最重要同时也是最复杂的协议。

SSL握手协议主要负责如下工作:
算法协商
身份验证
确定密钥

SSL握手过程分为四种:


握手种类描述
Full Handshake全流程握手,C/S双方从无到有建立SSL连接;
Resumn sessionHandshakeC/S双方曾经建立过连接,但中途断了,SsL会话信息还有保留,只需要执行部分握手流程就可建立SSL连接;
ServerRe-negotationHandshake已经建立了SsL连接,但sever端为了某些原因(比如安全性)要求重新对密钥进行协商,也只需要执行部分握手流程;
Client Re-negotiationHandshake已经建立SSL连接,但client端为了某些原因要求重新协商,只需执行部分握手流程。

全流程握手详解


Client hello


Client hello:
客户端给服务器端发个hello的问候,问候里包含有它使用的SSL版本号、加密套件列表,压缩算法列表,客户端随机数,sessionid=0

服务器收到客户端的问候后,会从客户端提供的版本号中选出双方都支持的最高版本,从加密套件列表选择一种支持也安全性强的加密套件,从压缩算法列表选择压缩算法(一般为空)。


Server hello


Server hello:
服务器将上述选择的加密套件,压缩算法(NULL),且计算出的一个session_id和服务器随机数发送给客户端

客户端收到Server hello的报文会将加密套件,压缩算法(NULL),session_id和服务器随机数缓存起来。接着继续握手过程


Server Certificate


Server Certificate:
服务端将自己的证书发送给客户端,证明自己的身份。证书中包含服务器的身份信息,以及服务器的公钥

客户端收到Certificate报文会验证该证书是否过期,并将服务器的公钥缓存起来


Client Certificate Requst


Client Certificate Requst:

如果是SSI的双向认证的话,那么服务器端会向客户端发送client certrequest消息,索要客户端的证书,证书中包含有server端支持的证书类型,和所信任的所有证书发行机构(CA(Certificate Authority))列表。

客户端收到clint Certifitate Rlequst报文将消息中的证书类型列表和可信任证书发行机构列表保存下来,可在后面发送客户端证书时候拿来筛选证书用。


Server Hello done


服务器通知客户端这一步的握手消息发送完成。等待客户端确认。


Client Certificate


客户端从之前收到server端发的 certrequest消息中的支持的证书类型列表和信任的根CA(Certificate Authentcation)列表中选择满足条件的第一个证书发送给服务器。

服务端会缓存客户端的公钥


Client Key EXchange


若为RSA加密,客户端则产生48位随机数作为pre-master(预主密钥)并用服务端公钥加密后发出去。

服务器端缓存预主密钥


Certificate verify


Certificate verify这个消息中要包含一个签名,签名里头内容是从Client hello 开始到目前为止所有握手消息(不包括本消息)的摘要,然后客户端的私钥加密

由于之前的Client Certificate 消息中包含有客户端的公钥,因此用公钥解密该消息,验证客户端的真实性


Change Cipher Spec


Change Cipher Spec]该消息只有一个值为1的字节。不属于握手协议,和握手协议同一级别的改变加密约定协议。发送该消息的作用是为了告诉对方接下来的消息将采用新协商的加密套件和密钥进行通信。

在发送该消息的同时,客户端会把之前的客户端随机数,服务器端随机数、以及预主钥产生一个主密钥。并将主密钥进行密钥导出(服务器端的写MAC密钥、客户端写MAC密钥、服务器端的写密钥、客户端的写密钥),该过程只在本地进行,不发送给对方。


Client finished Message


Client finished Message:

这是客户端ssi协商成功结束的消息。也是第一个用协商好的密钥加密的消息。会把从client hello一直到现在的数据摘要,用客户端密钥加密,发送给服务器。确保握手过程的完整性和机密性。


加密套件列表

加密套件列表:
列表中包含了Client端支持的所有密钥套件。
一个密钥套件定义了一个密钥规格,其中描述如下内容:
密钥交换算法(非对称加密算法),
是否出口
对称加密算法
支持的最高对称密钥位数
MAC (Message Authentication Code)算法(或摘要算法)。

例sSl_RSA_WITH_R04_128_MD5= 0O04]非对称加密算法或密钥交换算法为RSA,采用高强度128位对称加密算法RCA,摘要或MAC算法为MD5,不支持出口/


推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
author-avatar
卟可爱頹廢
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有